#include "rept_user.h"
#include <QDebug>
#include <QDateTime>

QString Rept_user::getName(){
    return tr("Report - user");
}

bool Rept_user::init(const QString &lang){
    // подключаем перевод
    QTranslator * transrept = new QTranslator();
    if(transrept->load(QString(":/lang/report_user_%1.qm").arg(lang))){
        QCoreApplication::installTranslator(transrept);
    }
    //qDebug()()<<" INIT "<<this->getName();
    return true;
}

bool Rept_user::execDia(){
    // сначала нам необходимо получить список пользователей. именно пользователей, админы не подойдут.
    DiaQ diq(tr("Query users list"));
    connect(this,SIGNAL(sigFinishQ()),&diq,SLOT(slotFinish()));
    // отправляем запрос списка пользователей
    QStringList a;
    this->sigStartRequest(PLUGIN_NAME,"rept_user.getusers",a);
    // показываем заглушку
    diq.exec();

    DiaRptUsers diau(this->userslist);
    if(diau.exec()){
        // формируем запрос и ждем на него ответ
        QStringList b;
        b.append(diau.getUser());
        this->username=diau.getUser();
        this->dt_from = diau.getDTfrom();
        this->dt_to = diau.getDTto();
        b.append(this->dt_from);
        b.append(this->dt_to);
        this->sigStartRequest(PLUGIN_NAME,"rept_user.gettickets",b);
        diq.setText(tr("Query tickets"));
        diq.exec();


        // выдаем на печать
        DiaPrint diapri;
        diapri.setText(this->ht1);
        if(diapri.exec()){
            // понеслась печать.
            QPrinter printer;
            printer.setPageMargins(8,8,8,8,QPrinter::Millimeter);
            QPrintDialog *diaP = new QPrintDialog(&printer);

            if(diaP->exec() == QPrintDialog::Accepted){
                diapri.getDoc()->print(&printer);
            }

        }
        return true;
    }else{
        return false;
    }

}

void Rept_user::slotFinishRequest(const QString &plugName, const QString &requestName, QStringList params){
    // проверяем нам ли прилетел ответ
    if(plugName == PLUGIN_NAME){
        if(requestName == "rept_user.getusers" ){
        // прилетел ответ по списку пользователей.
        // запоминаем его
            this->userslist = params;
            // посылаем закрытие диалога заглушки
            emit this->sigFinishQ();
        }
        if(requestName == "rept_user.gettickets"){
            // прилетел ответ на запрос списка билетов для определенного пользователя в определенный период
            // вынимаем данные

            // подключаем шаблон
            QFile a;
            a.setFileName(":/resources/report_user_modelo.html");
            a.open(QIODevice::ReadOnly | QIODevice::Text);
            // кракозябры блеять
            this->ht1 = QString::fromUtf8(a.readAll());

            // сначала необходимо отобразить список проданных билетов.
            this->summ1 = 0;
            QString tb;
            int sch = 0;
            for(int i = 0; i < params.size()/9; i++ ){
                if(params.at(i*9+4) == "0"){
                    // сумма
                    summ1+=params.at(i*9+2).toInt();
                    // заполняем табличку проданных билетов
                    sch++;
                    tb.append("<tr>");
                        tb.append("<td>");
                        tb.append(QString::number(sch));
                        tb.append("</td>");
                        tb.append("<td>");
                        tb.append(params.at(i*9));
                        tb.append("</td>");
                        tb.append("<td>");
                        tb.append(params.at(i*9+7));
                        tb.append("<br>");
                        tb.append(params.at(i*9+8));
                        tb.append("</td>");
                        tb.append("<td>");
                        tb.append(params.at(i*9+1));
                        tb.append("</td>");
                        tb.append("<td>");
                        tb.append(params.at(i*9+2));
                        tb.append("</td>");
                        tb.append("<td>");
                        tb.append(params.at(i*9+3));
                        tb.append("</td>");


                    tb.append("</tr>");
                }
            }

            ht1.replace("$table_1$",tb);
            ht1.replace("$SUMM_1$",QString::number(summ1));

            // теперь список возращенных билетов
            this->summ1 = 0;
            tb.clear();
            int sh=0;
            for(int i = 0; i < params.size()/9; i++ ){
                if(params.at(i*9+4) == "1"){
                    // сумма
                    summ1+=params.at(i*9+2).toInt();
                    // заполняем табличку проданных билетов
                    tb.append("<tr>");
                    sh++;
                    tb.append("<td>");
                    tb.append(QString::number(sh));
                    tb.append("</td>");
                        tb.append("<td>");
                        tb.append(params.at(i*9));
                        tb.append("</td>");
                        tb.append("<td>");
                        tb.append(params.at(i*9+7));
                        tb.append("<br>");
                        tb.append(params.at(i*9+8));
                        tb.append("</td>");
                        tb.append("<td>");
                        tb.append(params.at(i*9+1));
                        tb.append("</td>");
                        tb.append("<td>");
                        tb.append(params.at(i*9+2));
                        tb.append("</td>");
                        tb.append("<td>");
                        tb.append(params.at(i*9+3));
                        tb.append("</td>");
                        tb.append("<td>");
                        tb.append(params.at(i*9+6));
                        tb.append("</td>");
                        tb.append("<td>");
                        tb.append(params.at(i*9+5));
                        tb.append("</td>");

                    tb.append("</tr>");
                }
            }

            ht1.replace("$table_2$",tb);
            ht1.replace("$CURRENT_DT$",QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss"));
            ht1.replace("$FROM$",this->dt_from);
            ht1.replace("$TO$",this->dt_to);
            ht1.replace("$SUMM_2$",QString::number(summ1));
            ht1.replace("$USER_NAME$",this->username);



            //
            emit this->sigFinishQ();

        }


    }


}

Q_EXPORT_PLUGIN2(iface_rept,Rept_user)
